/*
 * @Descripttion: 
 * @version: 
 * @Author: turingchang
 * @Date: 2020-09-02 17:14:25
 * @LastEditors: turingchang
 * @LastEditTime: 2020-09-05 23:39:42
 */
/* indent size: 2 */

module.exports = app => {
  const DataTypes = app.Sequelize;

  const Model = app.model.define('admin', {
    id: {
      type: DataTypes.INTEGER(11),
      allowNull: false,
      primaryKey: true,
      autoIncrement: true,
    },
    name: {
      type: DataTypes.STRING(50),
      allowNull: false,
      get(){
        var value =this.getDataValue('name');
        if(app.utils.validator.isNull(value)){
          value ='';
        }
        return value;
      },
    },
    nick_name: {
      type: DataTypes.STRING(50),
      allowNull: false,
      get(){
        var value =this.getDataValue('nick_name');
        if(app.utils.validator.isNull(value)){
          value ='';
        }
        return value;
      },
    },
    password: {
      type: DataTypes.STRING(32),
      allowNull: false,
      defaultValue: '',
      get(){
        var value =this.getDataValue('password');
        if(app.utils.validator.isNull(value)){
          value ='';
        }
        return value;
      },
    },
    email: {
      type: DataTypes.STRING(32),
      allowNull: true,
      defaultValue: '',
      get(){
        var value =this.getDataValue('email');
        if(app.utils.validator.isNull(value)){
          value ='';
        }
        return value;
      },
    },
    mobile: {
      type: DataTypes.STRING(11),
      allowNull: true,
      defaultValue: '',
      get(){
        var value =this.getDataValue('mobile');
        if(app.utils.validator.isNull(value)){
          value ='';
        }
        return value;
      },
    },
    avatar: {
      type: DataTypes.STRING(255),
      allowNull: false,
      defaultValue: '',
      get(){
        var value =this.getDataValue('avatar');
        if(app.utils.validator.isNull(value)){
          value ='';
        }
        return value;
      },
    },
    sex: {
      type: DataTypes.STRING(20),
      allowNull: true,
      defaultValue: 'unknown',
      get(){
        var value =this.getDataValue('sex');
        if(app.utils.validator.isNull(value)){
          value ='';
        }
        return value;
      }
    },
    wx: {
      type: DataTypes.STRING(20),
      allowNull: true,
      defaultValue: '',
      get(){
        var value =this.getDataValue('wx');
        if(app.utils.validator.isNull(value)){
          value ='';
        }
        return value;
      }
    },
    status: {
      type: DataTypes.STRING(20),
      allowNull: true,
      defaultValue: 'normal',
      get(){
        var value =this.getDataValue('status');
        if(app.utils.validator.isNull(value)){
          value ='';
        }
        return value;
      }
    },
    last_login_ip: {
      type: DataTypes.STRING(20),
      allowNull: true,
      defaultValue: '',
      get(){
        var value =this.getDataValue('last_login_ip');
        if(app.utils.validator.isNull(value)){
          value ='';
        }
        return value;
      }
    },
    last_login_time: {
      type: DataTypes.INTEGER(10),
      allowNull: true,
      defaultValue: '0',
      get(){
        var value =this.getDataValue('last_login_time');
        if(app.utils.validator.isNull(value)){
          value =0;
        }
        return value;
      }
    },
    create_time: {
      type: DataTypes.INTEGER(10),
      allowNull: false,
      // defaultValue:app.utils.time.getTimeSpan(),
      defaultValue:Math.round(new Date().getTime()/1000).toString(),
      get(){
        var value =this.getDataValue('create_time');
        if(app.utils.validator.isNull(value)){
          value =0;
        }
        return value;
      }
    },
    update_time: {
      type: DataTypes.INTEGER(10),
      allowNull: false,
      defaultValue:Math.round(new Date().getTime()/1000).toString(),
      get(){
        var value =this.getDataValue('update_time');
        if(app.utils.validator.isNull(value)){
          value =0;
        }
        return value;
      }
    },
    delete_time: {
      type: DataTypes.INTEGER(10),
      allowNull: false,
      defaultValue: '0',
      get(){
        var value =this.getDataValue('delete_time');
        if(app.utils.validator.isNull(value)){
          value =0;
        }
        return value;
      }
    },
    role_id: {
      type: DataTypes.INTEGER(11),
      allowNull: false,
      defaultValue: '0',
      get(){
        var value =this.getDataValue('role_id');
        if(app.utils.validator.isNull(value)){
          value =0;
        }
        return value;
      },
      // references: {
      //   model: app.model.Role,
      //   key: 'id',
      // }
    },
    pkey: {
      type: DataTypes.STRING(32),
      allowNull: true,
      defaultValue: '',
      get(){
        var value =this.getDataValue('pkey');
        if(app.utils.validator.isNull(value)){
          value =app.utils.generator.uid();
        }
        return value;
      },
    },
    online_status: {
      type: DataTypes.STRING(10),
      allowNull: true,
      defaultValue: 'offline',
      get(){
        var value =this.getDataValue('online_status');
        if(!app.utils.validator.isNull(value)){
          value =app.enums.online_status.offline.value;
        }
        return value;
      },
    },
    
  }, {
    tableName: 'yfb_admin',
    createdAt: "create_time",
    updatedAt: 'update_time',
    deletedAt: 'delete_time', 
    timestamps:true,
    paranoid: true,
  });

  Model.associate = function() {
    app.model.Admin.Admin.belongsTo(app.model.Admin.Role);  
    // app.model.Admin.belongsTo(app.model.Role,{ foreignKey: 'role_id' , targetKey: 'id'});    
  }

  return Model;
};
